package softwaretest.util;

import io.jsonwebtoken.Claims;
import io.jsonwebtoken.Jwts;
import io.jsonwebtoken.SignatureAlgorithm;
import org.springframework.stereotype.Component;

import java.util.Date;

@Component
public class JwtUtil {
    private final String SECRET_KEY = "your_secret_key"; // 替换为强密码
    private final long EXPIRATION_TIME = 86400000; // 1天

    // 生成 Token
    public String generateToken(String username) {
        return Jwts.builder()
                .setSubject(username) // 设置主题
                .setIssuedAt(new Date()) // 设置签发时间
                .setExpiration(new Date(System.currentTimeMillis() + EXPIRATION_TIME)) // 设置过期时间
                .signWith(SignatureAlgorithm.HS512, SECRET_KEY) // 使用密钥签名
                .compact();
    }

    // 验证 Token，返回 boolean
    public boolean validateToken(String token) {
        try {
            if (token == null || token.isEmpty()) {
                return false; // Token 为空
            }

            // 去除 "Bearer " 前缀（如果存在）
            if (token.startsWith("Bearer ")) {
                token = token.substring(7);
            }

            // 解析 Token
            Claims claims = Jwts.parser()
                    .setSigningKey(SECRET_KEY)
                    .parseClaimsJws(token)
                    .getBody();

            // 检查 Token 是否过期
            Date expiration = claims.getExpiration();
            if (expiration.before(new Date())) {
                return false; // Token 已过期
            }

            return true; // Token 有效
        } catch (Exception e) {
            return false; // Token 无效
        }
    }
}